#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8 + 69;
int main() {
string s; cin >> s;
int n = s.size(), zero = 0, one = 0;
for (char &c : s) c == '0' ? ++zero : ++one;
int bound = zero * one, dim = bound << 1 | 1;
vector DP(one + 1, vector(dim, INF));
for (int i = 0; i <= zero; ++i) {
vector newDP(one + 1, vector(dim, INF));
for (int j = 0; j <= one; ++j) {
if (!i and !j) {
newDP[j][bound] = 0;
continue;
}
int c = s[i + j - 1] - '0';
for (int k = 0; k <= dim; ++k) {
if (i and k + one - j <= dim) newDP[j][k] = min(newDP[j][k], DP[j][k + one - j] + c);
if (j and k - zero + i >= 0) newDP[j][k] = min(newDP[j][k], newDP[j - 1][k - zero + i] + !c);
}
}
DP.swap(newDP);
}
cout << DP[one][bound] / 2 << '\n';
return 0;
}
553A - Kyoya and Colored Balls | 1364A - XXXXX |
1499B - Binary Removals | 1569C - Jury Meeting |
108A - Palindromic Times | 46A - Ball Game |
114A - Cifera | 776A - A Serial Killer |
25B - Phone numbers | 1633C - Kill the Monster |
1611A - Make Even | 1030B - Vasya and Cornfield |
1631A - Min Max Swap | 1296B - Food Buying |
133A - HQ9+ | 1650D - Twist the Permutation |
1209A - Paint the Numbers | 1234A - Equalize Prices Again |
1613A - Long Comparison | 1624B - Make AP |
660B - Seating On Bus | 405A - Gravity Flip |
499B - Lecture | 709A - Juicer |
1358C - Celex Update | 1466B - Last minute enhancements |
450B - Jzzhu and Sequences | 1582C - Grandma Capa Knits a Scarf |
492A - Vanya and Cubes | 217A - Ice Skating |